package com.dkm.ou.me.repository.impl;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Repository;

import com.dkm.base.core.helper.SpringHelper;
import com.dkm.base.db.persistence.dao.IQueryDao;
import com.dkm.biz.ou.constants.RoleTypeCode;
import com.dkm.biz.repository.AbstractRepository;
import com.dkm.ou.me.domain.Res;
import com.dkm.ou.me.persistence.dao.ResQueryDao;
import com.dkm.ou.me.persistence.entity.ResPo;
import com.dkm.ou.me.persistence.entity.RolePo;
import com.dkm.ou.me.repository.ResRepository;
import com.dkm.ou.me.repository.RoleRepository;

/**
 * 对象功能:资源权限 Repository接口的实现类
 * 开发公司:唯心六艺软件 - Craft6.cn
 * 开发人员:winston
 * 创建时间:2014-07-21 17:10:20
 */
@Repository
public class ResRepositoryImpl extends AbstractRepository<String, ResPo,Res> implements ResRepository{
	  
	@Resource
	private  ResQueryDao resQueryDao;
	
	@Resource
	private RoleRepository roleRepository;

	public Res newInstance() {
		ResPo po = new ResPo();
		Res res = SpringHelper.getBean(Res.class);
		res.setData(po);
		return res;
	}

	public Res newInstance(ResPo po) {
		Res res = SpringHelper.getBean(Res.class);
		res.setData(po);
		return res;
	} 
	
	@Override
	protected IQueryDao<String, ResPo> getQueryDao() {
		return resQueryDao;
	}

	public List<ResPo> findAllToTree() {		
		List<ResPo> resPos = resQueryDao.findAllActived();
		return resPosToTree(resPos);
	}

	public List<ResPo> findBySubsysIdToTree(String subsysId) {
		List<ResPo> resPos = resQueryDao.findBySubsysId(subsysId);
		return resPosToTree(resPos);
	}
	
	private List<ResPo> resPosToTree(List<ResPo> resPos){
		Integer maxDepth = resQueryDao.getMaxDepth();
		List<ResPo> tree = convertToTree(resPos, maxDepth);
		return tree;
	}

	@Override
	public List<ResPo> findResByUserIdToTree(String userId) {
		List<ResPo> resPos=null;
		List<RolePo> rolePos=roleRepository.findByUserIds(userId);
		if(rolePos==null || rolePos.size()==0){
			return new ArrayList<ResPo>();
		}
		//审核角色
		String belong=RoleTypeCode.audit.name();
		for (RolePo rolePo:rolePos) {
			if(belong.equals(rolePo.getRoleType())){
				resPos=resQueryDao.findResByBelong(belong);
				return resPosToTree(resPos);
			}
		}
		//安全角色
		belong=RoleTypeCode.security.name();
		for (RolePo rolePo:rolePos) {
			if(belong.equals(rolePo.getRoleType())){
				resPos=resQueryDao.findResByBelong(belong);
				return resPosToTree(resPos);
			}
		}
		//系统管理角色
		belong=RoleTypeCode.system.name();
		for (RolePo rolePo:rolePos) {
			if(belong.equals(rolePo.getRoleType())){
				resPos=resQueryDao.findResByBelong(belong);
				return resPosToTree(resPos);
			}
		}
		//普通角色
		resPos = resQueryDao.findResByUserId(userId);
		return resPosToTree(resPos);
	}	
	public List<ResPo> findBbsResByUserId(String userId){
		List<ResPo> resPos=null;
		List<RolePo> rolePos=roleRepository.findByUserIds(userId);
		if(rolePos==null || rolePos.size()==0){
			return new ArrayList<ResPo>();
		}
		//审核角色
		String belong=RoleTypeCode.audit.name();
		for (RolePo rolePo:rolePos) {
			if(belong.equals(rolePo.getRoleType())){
				return resQueryDao.findResByBelong(belong);
			}
		}
		//安全角色
		belong=RoleTypeCode.security.name();
		for (RolePo rolePo:rolePos) {
			if(belong.equals(rolePo.getRoleType())){
				return resQueryDao.findResByBelong(belong);
			}
		}
		//系统管理角色
		belong=RoleTypeCode.system.name();
		for (RolePo rolePo:rolePos) {
			if(belong.equals(rolePo.getRoleType())){
				return resQueryDao.findResByBelong(belong);
			}
		}
		return  resQueryDao.findResByUserId(userId);
	}
}
